Code coverage report for src/binding-expression.js

Statements: 89.39% (59 / 66)      Branches: 64.29% (18 / 28)      Functions: 100% (14 / 14)      Lines: 90.63% (58 / 64)      Ignored: none     

All files » src/ » binding-expression.js
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 1201     1   52   1   1     1 1 26   26 26 26 26 26 26 26     1 26     1     1   1 1 26   26 26 26 26 26     1 37     1 26   26     26 5     26 26               26   26 26 60 60 41         26 26     26 24 40       26                   1 24 14   24 24 24     24 23 23       1          
System.register(['./binding-modes'], function (_export) {
  'use strict';
 
  var bindingMode, BindingExpression, Binding;
 
  function _classCallCheck(instance, Constructor) { Iif (!(instance instanceof Constructor)) { throw new TypeError('Cannot call a class as a function'); } }
 
  return {
    setters: [function (_bindingModes) {
      bindingMode = _bindingModes.bindingMode;
    }],
    execute: function () {
      BindingExpression = (function () {
        function BindingExpression(observerLocator, targetProperty, sourceExpression, mode, valueConverterLookupFunction, attribute) {
          _classCallCheck(this, BindingExpression);
 
          this.observerLocator = observerLocator;
          this.targetProperty = targetProperty;
          this.sourceExpression = sourceExpression;
          this.mode = mode;
          this.valueConverterLookupFunction = valueConverterLookupFunction;
          this.attribute = attribute;
          this.discrete = false;
        }
 
        BindingExpression.prototype.createBinding = function createBinding(target) {
          return new Binding(this.observerLocator, this.sourceExpression, target, this.targetProperty, this.mode, this.valueConverterLookupFunction);
        };
 
        return BindingExpression;
      })();
 
      _export('BindingExpression', BindingExpression);
 
      Binding = (function () {
        function Binding(observerLocator, sourceExpression, target, targetProperty, mode, valueConverterLookupFunction) {
          _classCallCheck(this, Binding);
 
          this.observerLocator = observerLocator;
          this.sourceExpression = sourceExpression;
          this.targetProperty = observerLocator.getObserver(target, targetProperty);
          this.mode = mode;
          this.valueConverterLookupFunction = valueConverterLookupFunction;
        }
 
        Binding.prototype.getObserver = function getObserver(obj, propertyName) {
          return this.observerLocator.getObserver(obj, propertyName);
        };
 
        Binding.prototype.bind = function bind(source) {
          var _this = this;
 
          var targetProperty = this.targetProperty,
              info;
 
          if ('bind' in targetProperty) {
            targetProperty.bind();
          }
 
          Eif (this.mode == bindingMode.oneWay || this.mode == bindingMode.twoWay) {
            Iif (this._disposeObserver) {
              if (this.source === source) {
                return;
              }
 
              this.unbind();
            }
 
            info = this.sourceExpression.connect(this, source);
 
            Eif (info.observer) {
              this._disposeObserver = info.observer.subscribe(function (newValue) {
                var existing = targetProperty.getValue();
                if (newValue !== existing) {
                  targetProperty.setValue(newValue);
                }
              });
            }
 
            Eif (info.value !== undefined) {
              targetProperty.setValue(info.value);
            }
 
            if (this.mode == bindingMode.twoWay) {
              this._disposeListener = targetProperty.subscribe(function (newValue) {
                _this.sourceExpression.assign(source, newValue, _this.valueConverterLookupFunction);
              });
            }
 
            this.source = source;
          } else {
            var value = this.sourceExpression.evaluate(source, this.valueConverterLookupFunction);
 
            if (value !== undefined) {
              targetProperty.setValue(value);
            }
          }
        };
 
        Binding.prototype.unbind = function unbind() {
          if ('unbind' in this.targetProperty) {
            this.targetProperty.unbind();
          }
          Eif (this._disposeObserver) {
            this._disposeObserver();
            this._disposeObserver = null;
          }
 
          if (this._disposeListener) {
            this._disposeListener();
            this._disposeListener = null;
          }
        };
 
        return Binding;
      })();
    }
  };
});
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi9Vc2Vycy9FaXNlbmJlcmdFZmZlY3QvRG9jdW1lbnRzL0dpdEh1Yi9UaGUgRHVyYW5kYWwgUHJvamVjdC9hdXJlbGlhL2JpbmRpbmcvc3JjL2JpbmRpbmctZXhwcmVzc2lvbi5qcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7bUJBRWEsaUJBQWlCLEVBd0J4QixPQUFPOzs7Ozs7a0NBMUJMLFdBQVc7OztBQUVOLHVCQUFpQjtBQUNqQixpQkFEQSxpQkFBaUIsQ0FDaEIsZUFBZSxFQUFFLGNBQWMsRUFBRSxnQkFBZ0IsRUFDM0QsSUFBSSxFQUFFLDRCQUE0QixFQUFFLFNBQVMsRUFBQztnQ0FGckMsaUJBQWlCOztBQUcxQixjQUFJLENBQUMsZUFBZSxHQUFHLGVBQWUsQ0FBQztBQUN2QyxjQUFJLENBQUMsY0FBYyxHQUFHLGNBQWMsQ0FBQztBQUNyQyxjQUFJLENBQUMsZ0JBQWdCLEdBQUcsZ0JBQWdCLENBQUM7QUFDekMsY0FBSSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUM7QUFDakIsY0FBSSxDQUFDLDRCQUE0QixHQUFHLDRCQUE0QixDQUFDO0FBQ2pFLGNBQUksQ0FBQyxTQUFTLEdBQUcsU0FBUyxDQUFDO0FBQzNCLGNBQUksQ0FBQyxRQUFRLEdBQUcsS0FBSyxDQUFDO1NBQ3ZCOztBQVZVLHlCQUFpQixXQVk1QixhQUFhLEdBQUEsdUJBQUMsTUFBTSxFQUFDO0FBQ25CLGlCQUFPLElBQUksT0FBTyxDQUNoQixJQUFJLENBQUMsZUFBZSxFQUNwQixJQUFJLENBQUMsZ0JBQWdCLEVBQ3JCLE1BQU0sRUFDTixJQUFJLENBQUMsY0FBYyxFQUNuQixJQUFJLENBQUMsSUFBSSxFQUNULElBQUksQ0FBQyw0QkFBNEIsQ0FDaEMsQ0FBQztTQUNMOztlQXJCVSxpQkFBaUI7OzttQ0FBakIsaUJBQWlCOztBQXdCeEIsYUFBTztBQUNBLGlCQURQLE9BQU8sQ0FDQyxlQUFlLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxFQUFFLGNBQWMsRUFBRSxJQUFJLEVBQUUs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QUMsZ0JBQWdCLEVBQUUsQ0FBQztBQUN4QixnQkFBSSxDQUFDLGdCQUFnQixHQUFHLElBQUksQ0FBQztXQUM5Qjs7QUFFRCxjQUFHLElBQUksQ0FBQyxnQkFBZ0IsRUFBQztBQUN2QixnQkFBSSxDQUFDLGdCQUFnQixFQUFFLENBQUM7QUFDeEIsZ0JBQUksQ0FBQyxnQkFBZ0IsR0FBRyxJQUFJLENBQUM7V0FDOUI7U0FDRjs7ZUExRUcsT0FBTyIsImZpbGUiOiIvVXNlcnMvRWlzZW5iZXJnRWZmZWN0L0RvY3VtZW50cy9HaXRIdWIvVGhlIER1cmFuZGFsIFByb2plY3QvYXVyZWxpYS9iaW5kaW5nL3NyYy9iaW5kaW5nLWV4cHJlc3Npb24uanMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge2JpbmRpbmdNb2RlfSBmcm9tICcuL2JpbmRpbmctbW9kZXMnO1xuXG5leHBvcnQgY2xhc3MgQmluZGluZ0V4cHJlc3Npb24ge1xuICBjb25zdHJ1Y3RvcihvYnNlcnZlckxvY2F0b3IsIHRhcmdldFByb3BlcnR5LCBzb3VyY2VFeHByZXNzaW9uLFxuICAgIG1vZGUsIHZhbHVlQ29udmVydGVyTG9va3VwRnVuY3Rpb24sIGF0dHJpYnV0ZSl7XG4gICAgdGhpcy5vYnNlcnZlckxvY2F0b3IgPSBvYnNlcnZlckxvY2F0b3I7XG4gICAgdGhpcy50YXJnZXRQcm9wZXJ0eSA9IHRhcmdldFByb3BlcnR5O1xuICAgIHRoaXMuc291cmNlRXhwcmVzc2lvbiA9IHNvdXJjZUV4cHJlc3Npb247XG4gICAgdGhpcy5tb2RlID0gbW9kZTtcbiAgICB0aGlzLnZhbHVlQ29udmVydGVyTG9va3VwRnVuY3Rpb24gPSB2YWx1ZUNvbnZlcnRlckxvb2t1cEZ1bmN0aW9uO1xuICAgIHRoaXMuYXR0cmlidXRlID0gYXR0cmlidXRlO1xuICAgIHRoaXMuZGlzY3JldGUgPSBmYWxzZTtcbiAgfVxuXG4gIGNyZWF0ZUJpbmRpbmcodGFyZ2V0KXtcbiAgICByZXR1cm4gbmV3IEJpbmRpbmcoXG4gICAgICB0aGlzLm9ic2VydmVyTG9jYXRvcixcbiAgICAgIHRoaXMuc291cmNlRXhwcmVzc2lvbixcbiAgICAgIHRhcmdldCxcbiAgICAgIHRoaXMudGFyZ2V0UHJvcGVydHksXG4gICAgICB0aGlzLm1vZGUsXG4gICAgICB0aGlzLnZhbHVlQ29udmVydGVyTG9va3VwRnVuY3Rpb25cbiAgICAgICk7XG4gIH1cbn1cblxuY2xhc3MgQmluZGluZyB7XG4gIGNvbnN0cnVjdG9yKG9ic2VydmVyTG9jYXRvciwgc291cmNlRXhwcmVzc2lvbiwgdGFyZ2V0LCB0YXJnZXRQcm9wZXJ0eSwgbW9kZSwgdmFsdWVDb252ZXJ0ZXJMb29rdXBGdW5jdGlvbil7XG4gICAgdGhpcy5vYnNlcnZlckxvY2F0b3IgPSBvYnNlcnZlckxvY2F0b3I7XG4gICAgdGhpcy5zb3VyY2VFeHByZXNzaW9uID0gc291cmNlRXhwcmVzc2lvbjtcbiAgICB0aGlzLnRhcmdldFByb3BlcnR5ID0gb2JzZXJ2ZXJMb2NhdG9yLmdldE9ic2VydmVyKHRhcmdldCwgdGFyZ2V0UHJvcGVydHkpO1xuICAgIHRoaXMubW9kZSA9IG1vZGU7XG4gICAgdGhpcy52YWx1ZUNvbnZlcnRlckxvb2t1cEZ1bmN0aW9uID0gdmFsdWVDb252ZXJ0ZXJMb29rdXBGdW5jdGlvbjtcbiAgfVxuXG4gIGdldE9ic2VydmVyKG9iaiwgcHJvcGVydHlOYW1lKXtcbiAgICByZXR1cm4gdGhpcy5vYnNlcnZlckxvY2F0b3IuZ2V0T2JzZXJ2ZXIob2JqLCBwcm9wZXJ0eU5hbWUpO1xuICB9XG5cbiAgYmluZChzb3VyY2Upe1xuICAgIHZhciB0YXJnZXRQcm9wZXJ0eSA9IHRoaXMudGFyZ2V0UHJvcGVydHksXG4gICAgICAgIGluZm87XG5cbiAgICBpZiAoJ2JpbmQnIGluIHRhcmdldFByb3BlcnR5KXtcbiAgICAgIHRhcmdldFByb3BlcnR5LmJpbmQoKTtcbiAgICB9XG5cbiAgICBpZih0aGlzLm1vZGUgPT0gYmluZGluZ01vZGUub25lV2F5IHx8IHRoaXMubW9kZSA9PSBiaW5kaW5nTW9kZS50d29XYXkpe1xuICAgICAgaWYodGhpcy5fZGlzcG9zZU9ic2VydmVyKXtcbiAgICAgICAgaWYodGhpcy5zb3VyY2UgPT09IHNvdXJjZSl7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy51bmJpbmQoKTtcbiAgICAgIH1cblxuICAgICAgaW5mbyA9IHRoaXMuc291cmNlRXhwcmVzc2lvbi5jb25uZWN0KHRoaXMsIHNvdXJjZSk7XG5cbiAgICAgIGlmKGluZm8ub2JzZXJ2ZXIpe1xuICAgICAgICB0aGlzLl9kaXNwb3NlT2JzZXJ2ZXIgPSBpbmZvLm9ic2VydmVyLnN1YnNjcmliZShuZXdWYWx1ZSA9PntcbiAgICAgICAgICB2YXIgZXhpc3RpbmcgPSB0YXJnZXRQcm9wZXJ0eS5nZXRWYWx1ZSgpO1xuICAgICAgICAgIGlmKG5ld1ZhbHVlICE9PSBleGlzdGluZyl7XG4gICAgICAgICAgICB0YXJnZXRQcm9wZXJ0eS5zZXRWYWx1ZShuZXdWYWx1ZSk7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgIH1cblxuICAgICAgaWYoaW5mby52YWx1ZSAhPT0gdW5kZWZpbmVkKXtcbiAgICAgICAgdGFyZ2V0UHJvcGVydHkuc2V0VmFsdWUoaW5mby52YWx1ZSk7XG4gICAgICB9XG5cbiAgICAgIGlmKHRoaXMubW9kZSA9PSBiaW5kaW5nTW9kZS50d29XYXkpe1xuICAgICAgICB0aGlzLl9kaXNwb3NlTGlzdGVuZXIgPSB0YXJnZXRQcm9wZXJ0eS5zdWJzY3JpYmUobmV3VmFsdWUgPT4ge1xuICAgICAgICAgIHRoaXMuc291cmNlRXhwcmVzc2lvbi5hc3NpZ24oc291cmNlLCBuZXdWYWx1ZSwgdGhpcy52YWx1ZUNvbnZlcnRlckxvb2t1cEZ1bmN0aW9uKTtcbiAgICAgICAgfSk7XG4gICAgICB9XG5cbiAgICAgIHRoaXMuc291cmNlID0gc291cmNlO1xuICAgIH1lbHNle1xuICAgICAgdmFyIHZhbHVlID0gdGhpcy5zb3VyY2VFeHByZXNzaW9uLmV2YWx1YXRlKHNvdXJjZSwgdGhpcy52YWx1ZUNvbnZlcnRlckxvb2t1cEZ1bmN0aW9uKTtcblxuICAgICAgaWYodmFsdWUgIT09IHVuZGVmaW5lZCl7XG4gICAgICAgIHRhcmdldFByb3BlcnR5LnNldFZhbHVlKHZhbHVlKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICB1bmJpbmQoKXtcbiAgICBpZiAoJ3VuYmluZCcgaW4gdGhpcy50YXJnZXRQcm9wZXJ0eSl7XG4gICAgICB0aGlzLnRhcmdldFByb3BlcnR5LnVuYmluZCgpO1xuICAgIH1cbiAgICBpZih0aGlzLl9kaXNwb3NlT2JzZXJ2ZXIpe1xuICAgICAgdGhpcy5fZGlzcG9zZU9ic2VydmVyKCk7XG4gICAgICB0aGlzLl9kaXNwb3NlT2JzZXJ2ZXIgPSBudWxsO1xuICAgIH1cblxuICAgIGlmKHRoaXMuX2Rpc3Bvc2VMaXN0ZW5lcil7XG4gICAgICB0aGlzLl9kaXNwb3NlTGlzdGVuZXIoKTtcbiAgICAgIHRoaXMuX2Rpc3Bvc2VMaXN0ZW5lciA9IG51bGw7XG4gICAgfVxuICB9XG59XG4iXX0=